/**
 *  无展示播放音频
 *
 *  @param url 音频的url
 *
 *  audio为单例模式，为了防止为播放完被终止，这里维护了一个队列;
 *
 *  只有在当前音频播放完成才出队,因为如果刚开始播放就出队,
 *  假设出队后queue为0，则无法判断当前是否正在播放音频;
 *
 *
 */

let audio = null;
let queue = [];


// 临时：方便测试
// window.queue = queue;
// window.clearQueue = clearQueue;
export default {
	/**
	 *  播放音频
	 *
	 *  @param urls {array} 音频地址
	 *  @param playWhenEmpty {boolean} 只有在队列空的时候才播放新的音频
	 */
	playSound (urls, playWhenEmpty=true) {
		// 文档未加载完成不能播放
		if (document.readyState !== 'complete') return;
		if (playWhenEmpty && queue.length > 0) return;

		if (typeof urls === 'string') {
			urls = [urls];
		}
		console.log(urls)
		urls.forEach(url => {
			_playSound(url);
		});
	},

	/**
	 *  清除播放队列
	 */
	clearQueue() {
		// 因为播放完了才会出队
		// 所以保留对头的
		// 对头的是是正在播放的
		queue.splice(1, Infinity);
	}
}


function _playSound (url) {
	function _continue (evt) {
		// 播放完成后再出队
		queue.shift();
		console.log(`当前语音报警还有${queue.length}条`);
		if (queue.length > 0) {
			// 取队首的音频
			let _url = queue[0];
			_play(_url);
		}
	}

	// 单例模式
	if (!audio) {
		audio = document.createElement('audio');
		/**
		 * 默认自动播放不好使
		 * 需要做如下设置
		 * 1. Open chrome://flags/#autoplay-policy
		 * 2. Setting No user gesture is required
		 * 3. Relaunch Chrome
		 */
		//audio.setAttribute('autoplay', 'autoplay');
		audio.autoplay = true;
		// 静音状态也不能保证自动播放
		//audio.muted = true;
		/*setTimeout(() => {
			audio.muted = false;
		}, 5000);*/
		audio.addEventListener('ended', _continue, false);
		audio.addEventListener('error', _continue, false);
		document.body.appendChild(audio);
	}

	/*
	if (audio.paused) {
		console.log('play called');
		requestAnimationFrame(() => {
			audio.play();
		});
	}*/

	// 直接入队，当播放完成后再出队
	queue.push(url);
	if (queue.length === 1) {
		_play(url);
	}
}

function _play(url) {
	audio.setAttribute('src', url);
	/*if (audio.paused) {
		audio.play();
	}*/
}
